/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package isd.resto.rn;

import isd.general.rn.ComprobanteRN;
import isd.general.rn.MonedaRN;
import isd.general.rn.SucursalRN;
import isd.inventario.rn.ST_ListaPrecioRN;
import java.util.List;
import java.util.Map;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.LocalBean;
import isd.general.excepciones.ExcepcionGeneralSistema;
import isd.general.modelo.GR_Comprobante;
import isd.general.modelo.GR_Formulario;
import isd.general.rn.FormularioRN;
import isd.resto.dao.RT_MovimientoDAO;
import isd.resto.modelo.RT_EstadoMovimiento;
import isd.resto.modelo.RT_ItemMovimiento;
import isd.resto.modelo.RT_Movimiento;
import java.util.Date;


/**
 *
 * @author Claudio
 */
@Stateless
@LocalBean
public class RT_MovimientoRN {

    @EJB private SucursalRN SucursalRN;
    @EJB private MonedaRN monedaRN;
    @EJB private RT_MovimientoDAO movimientoDAO;
    @EJB private ComprobanteRN comprobanteDAO;
    @EJB private ST_ListaPrecioRN listaPrecioRN;
    @EJB private RT_EstadoMovimientoRN estadoRN;
    @EJB private FormularioRN formularioRN;
//    @EJB private GR_MailFactory mailFactory;

    public synchronized void guardar(RT_Movimiento m) throws Exception {

//        sincronizarCantidades(m);
//        generarItemsDetalleVacio(m);
//        generarItemsSerie(m);
//        generarComprobanteStock(m);
//        generarItemsAnulacion(m);
//        borrarItemsSerie(m);
//        puedoGuardarMovimiento(m);

//        if (m.getCircuito().getActzst()=='S' && m.getMovimientoInventario()!=null){
//            inventarioRN.guardar(m.getMovimientoInventario());
//        }

        if(m.getId()==null){
            movimientoDAO.crear(m);    
        }else{
            movimientoDAO.editar(m);
        }
    }

    public RT_Movimiento nuevoMovimiento(){
        return new RT_Movimiento();
    }

    public RT_Movimiento nuevoMovimiento(String modfor,String codfor) throws ExcepcionGeneralSistema {
            
        GR_Comprobante comprobante = comprobanteDAO.getComprobante(modfor, codfor);
        RT_Movimiento m = nuevoMovimiento(comprobante);
        return m;
    }

    public RT_Movimiento nuevoMovimiento(GR_Comprobante comprobante) throws ExcepcionGeneralSistema{
        
        RT_Movimiento m = crearMovimiento(comprobante);
        return m;
    }

    private RT_Movimiento crearMovimiento(GR_Comprobante comprobante) throws ExcepcionGeneralSistema{

        if(comprobante==null) throw new ExcepcionGeneralSistema("El comprobante no puede ser nulo");

        //Buscamos el formulario correspondiente
        GR_Formulario formulario = formularioRN.getFormulario(comprobante);
        
        RT_Movimiento m = new RT_Movimiento(formulario);
        m.setComprobante(comprobante);
        m.setEstado(estadoRN.getEstadoMovimiento("A"));
        return m;
    }

    public void cerrarMesa(RT_Movimiento m) throws Exception{

        int nroFor = formularioRN.tomarProximoNumero(m.getFormulario());
        m.setNrofor(nroFor);
        m.setEstado(estadoRN.getEstadoMovimiento("Z"));
        guardar(m);
    }   

    public boolean eliminarItemProducto(RT_Movimiento mov,  RT_ItemMovimiento nItem){

        boolean fItemBorrado = false;
        int i = 0;
        int indiceItemProducto = -1;

        for(RT_ItemMovimiento ip: mov.getItems()){

            if(ip.getProducto()!=null){

                if(ip.getProducto().equals(nItem.getProducto())){
                    indiceItemProducto = i;
                }
            }
            i++;
        }

        i = 0;

        //Borramos los items productos
        if(indiceItemProducto>=0){
            RT_ItemMovimiento remove = mov.getItems().remove(indiceItemProducto);
            if(remove!=null){
                fItemBorrado = true;
            }
        }

        
        return fItemBorrado;
    }

    public List<RT_Movimiento> getMovimientosNoCerrados(Date fechaMovimiento) {

        RT_EstadoMovimiento estado = estadoRN.getEstadoMovimiento("A");
        return movimientoDAO.getMovimientos(fechaMovimiento,estado);
    }

 
}

